package com.etone.smartAudit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.etone.smartAudit.domain.DataModel;
import com.etone.smartAudit.enums.DataBaseType;
import com.etone.smartAudit.enums.OpenType;
import com.etone.smartAudit.vo.dataModel.DataModelListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author: sovy
 * @date: 2020/11/10
 * @description:
 */

@Mapper
public interface DataModelMapper extends BaseMapper<DataModel> {

    /**
     * 查找数据模型列表
     *
     * @param modelName
     * @param level3Ids
     * @param databaseName
     * @param itemId
     * @param passiveItemId
     * @param isAuth
     * @param openType
     * @return
     */
    List<DataModelListVO> findList(@Param("adminId") Integer adminId, @Param("modelName") String modelName, @Param("level3Ids") List<Integer> level3Ids, @Param("databaseName") String databaseName, @Param("itemId") Integer itemId, @Param("passiveItemId") Integer passiveItemId, @Param("isAuth") Boolean isAuth, @Param("openType") OpenType openType);

    /**
     * 查找私有数据模型列表
     *
     * @param modelName
     * @param level3Ids
     * @param databaseName
     * @param itemId
     * @return
     */
    List<DataModelListVO> findPrivateList(@Param("adminId") Integer adminId, @Param("modelName") String modelName, @Param("level3Ids") List<Integer> level3Ids, @Param("databaseName") String databaseName, @Param("itemId") Integer itemId);

    /**
     * 批量增加模型授权
     *
     * @param itemId
     * @param dataModelIds
     * @return
     */
    int addDataModelAuth(@Param("itemId") Integer itemId, @Param("dataModelIds") List<Integer> dataModelIds);

    /**
     * 检查私有数据权限
     *
     * @param id
     * @param adminId
     * @return
     */
    boolean checkPrivateData(@Param("id") Integer id, @Param("adminId") Integer adminId);

    /**
     * 同一个项目，同一台服务器，同一个数据库，同一个schema，检查表名是否存在
     *
     * @param itemId
     * @param serverId
     * @param database
     * @param schema
     * @param tableName
     * @param dataBaseType
     * @return
     */
    boolean checkTableNameExists(@Param("itemId") Integer itemId, @Param("serverId") Integer serverId, @Param("database") String database, @Param("schema") String schema, @Param("tableName") String tableName, @Param("dataBaseType") DataBaseType dataBaseType);
}